//
// Created by 原帅 on 2022/9/28.
//

#ifndef R_RAPP_H
#define R_RAPP_H

#include "vector"
#include "RSignalCenter.h"
#include "RInitializer.h"
#include "RProcessor.h"
#include "RFinisher.h"
#include "RProcUnitRegisterIF.h"
#include "RInitRegisterIF.h"
#include "RProcRegisterIF.h"
#include "RFinRegisterIF.h"


class RApp : public RProcUnitRegisterIF, public RInitRegisterIF, public RProcRegisterIF, public RFinRegisterIF {

public:
    static RApp &DefaultInst();

private:
    bool running = true;

    RInitializer rInitializer;

    RProcessor rProcessor;

    RFinisher rFinisher;

    RApp() {}

public:
    int run(int argc=0,char** argv= nullptr);

    int stop();

    /**
     * 注册一个RProcUnit， RProcUnit 是一个集成封装了InitProc ，Proc，FinProc 的执行单元
     * @param procUnit
     * @return
     */
    int registerProcUnit(RProcUnit *procUnit) override;

    /**
     * 注册初始化处理接口，该注册接口会在程序的runloop 之前，执行一次
     * @param rInitProcIf
     * @return
     */
    int registerInitProc(RInitProcIF *rInitProcIf) override;

    /**
     * 注册程序的处理接口，该接口在程序runloop 中执行
     * @param rProcIf
     * @return
     */
    int registerProc(RProcIF *rProcIf) override;

    /**
     * 注册程序结束处理， 程序跳出runloop后执行
     * @param rFinProcIf
     * @return
     */
    int registerFinProc(RFinProcIF *rFinProcIf) override;

};


#endif //R_RAPP_H
